package n2352;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	static class Node{
		int left,right;
		int cnt;
	}
	
	static Node arr[]=new Node[97000];
	static int rank[]=new int[15000];
	static {
		for(int i=0;i<arr.length;i++)
		{
			arr[i]=new Node();
		}
	}
	
	static void build(int index,int left,int right)
	{
		arr[index].left=left;
		arr[index].right=right;
		arr[index].cnt=0;
		if(left==right)return;
		int mid=(left+right)>>1;
		build(index*2,left,mid);
		build(index*2+1,mid+1,right);
	}
	
	static int find(int index,int left,int right)
	{
		if(arr[index].left>=left&&arr[index].right<=right)
		{
			return arr[index].cnt;
		}
		int mid=(arr[index].left+arr[index].right)>>1;
		if(left>mid)
		{
			return find(index*2+1,left,right);
		}else if(right<=mid)
		{
			return find(index*2,left,right);
		}else {
			return find(index*2,left,mid)+find(index*2+1,mid+1,right);
		}
	}
	
	static void update(int index,int value)
	{
		arr[index].cnt++;
		if(arr[index].left==arr[index].right)return;
		int mid=(arr[index].left+arr[index].right)>>1;
		if(value>mid)
		{
			update(index*2+1,value);
		}else 
		{
			update(index*2,value);
		}
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {

		build(1, 0, 32000);
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(bf.readLine());
		for(int i=0;i<n;i++)
		{
			StringTokenizer st=new StringTokenizer(bf.readLine());
			int x=Integer.parseInt(st.nextToken());
			int k=find(1,0,x);
			rank[k]++;
			update(1,x);
		}
		for(int i=0;i<n;i++)System.out.println(rank[i]);
	}

}
